// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  try {
    const { action } = event

    switch (action) {
      // 用户登录
      case 'login':
        return await login(event, wxContext)
      
      // 获取用户信息
      case 'getUserInfo':
        return await getUserInfo(event, wxContext)
      
      // 更新用户信息
      case 'updateUserInfo':
        return await updateUserInfo(event, wxContext)
      
      default:
        return {
          code: -1,
          msg: '无效的action参数'
        }
    }
  } catch (err) {
    console.error(err)
    return {
      code: -1,
      msg: '服务器错误',
      error: err
    }
  }
}

/**
 * 用户登录
 */
async function login(event, wxContext) {
  const { OPENID } = wxContext
  const { nickName, avatarUrl } = event

  try {
    // 查询用户是否已存在
    const userResult = await db.collection('users').where({
      openid: OPENID
    }).get()

    let userId
    const now = new Date()

    if (userResult.data.length === 0) {
      // 新用户，创建记录
      const createResult = await db.collection('users').add({
        data: {
          openid: OPENID,
          nickname: nickName || '微信用户',
          avatar: avatarUrl || '',
          created_at: now,
          updated_at: now
        }
      })
      userId = createResult._id
    } else {
      // 老用户，更新最后登录时间
      userId = userResult.data[0]._id
      await db.collection('users').doc(userId).update({
        data: {
          updated_at: now
        }
      })
    }

    return {
      code: 0,
      msg: '登录成功',
      data: {
        userId: userId,
        openid: OPENID
      }
    }
  } catch (err) {
    console.error('登录失败：', err)
    return {
      code: -1,
      msg: '登录失败',
      error: err
    }
  }
}

/**
 * 获取用户信息
 */
async function getUserInfo(event, wxContext) {
  const { OPENID } = wxContext

  try {
    const result = await db.collection('users').where({
      openid: OPENID
    }).get()

    if (result.data.length === 0) {
      return {
        code: -1,
        msg: '用户不存在'
      }
    }

    return {
      code: 0,
      msg: '获取成功',
      data: result.data[0]
    }
  } catch (err) {
    console.error('获取用户信息失败：', err)
    return {
      code: -1,
      msg: '获取失败',
      error: err
    }
  }
}

/**
 * 更新用户信息
 */
async function updateUserInfo(event, wxContext) {
  const { OPENID } = wxContext
  const { nickname, signature, phone } = event

  try {
    const updateData = {
      updated_at: new Date()
    }

    if (nickname) updateData.nickname = nickname
    if (signature !== undefined) updateData.signature = signature
    if (phone) updateData.phone = phone

    await db.collection('users').where({
      openid: OPENID
    }).update({
      data: updateData
    })

    return {
      code: 0,
      msg: '更新成功'
    }
  } catch (err) {
    console.error('更新用户信息失败：', err)
    return {
      code: -1,
      msg: '更新失败',
      error: err
    }
  }
}

